class Solution {
public:
    bool isMatch(string s, string p) {
        if(s == p) return true;
        if(p.empty()) return false;
        if(p[0] == '.')
        {
            if(p[1] == '*')
            {
                int i = 0;
                do
                {
                    if(isMatch(s.substr(i), p.substr(2)))
                        return true;
                    i++;
                } while(s[i-1]);
                return false;
            }
            return ((!s.empty()&&isMatch(s.substr(1), p.substr(1))))? true: false;
        }
        else
        {
            if (p[1] == '*')
            {
                if(isMatch(s.substr(0), p.substr(2))) return true;
                int i = 0;
                while(s[i] == p[0])
                {
                    if(isMatch(s.substr(i + 1), p.substr(2)))
                        return true;
                    i++;
                }
                return false;
            }
            if (s.empty() || s[0] != p[0]) return false;
            return isMatch(s.substr(1), p.substr(1));
        }
        
    }
};
